package main

import "fmt"

type Person struct {
	name string
}

//方法
/*
方法的receiver type并非一定要是struct类型，type定义的类型别名、slice、map、channel、func类型等都可以。
struct结合它的方法就等价于面向对象中的类。只不过struct可以和它的方法分开，并非一定要属于同一个文件，但必须属于同一个包。
方法有两种接收类型：(T Type)和(T *Type)，它们之间有区别。
方法就是函数，所以Go中没有方法重载(overload)的说法，也就是说同一个类型中的所有方法名必须都唯一。
如果receiver是一个指针类型，则会自动解除引用。
方法和type是分开的，意味着实例的行为(behavior)和数据存储(field)是分开的，但是它们通过receiver建立起关联关系。
*/

func (per Person) eat() {
	fmt.Println(per.name + "eating.......")
}

func (per Person) sleep() {
	fmt.Println(per.name + "sleep.......")
}

func main() {
	var per Person
	per.name = "tom"
	per.eat()
	per.sleep()

}
